// 生成树形结构的函数
function generateTree() {
    // 准备生成树形结构的JSon数据,数据是发送Ajax请求得到
    $.ajax({
        url: "menu/get/whole/tree.json",
        type: "post",
        dataType: "json",
        success: function (response) {
            var result = response.result;
            if (result == "SUCCESS") {
                // 创建JSON对象由于存储zTree所做得设置
                var setting = {
                    "view": {
                        "addDiyDom": myAddDiyDom, //前面的图标
                        "addHoverDom": myAddHoverDom, // 鼠标移入
                        "removeHoverDom": myRemoveHoverDom// 鼠标离开


                    },
                    "data": {
                        "key": {
                            "url": "adong" //设置不进行跳转
                        }
                    }
                };
                // 从响应体中获取用来生成树形结构得JSON数据
                var zNodes = response.data;
                // 初始化树形结构
                $.fn.zTree.init($("#treeDemo"), setting, zNodes)


            }
            if (result == "FAILED") {
                layer.msg('生成失败!');
            }
        },
        error: function (response) {
            layer.msg('菜单显示失败,请重试');
        }
    })
}

// 修改默认图标
function myAddDiyDom(treeId, treeNode) {
    /*   treeId 是整个树形结构附着的ul标签的id
        treeNode是当前树形节点的全部数据,里面有后端插查询到的Menu对象的全部属性
    */

    /*
    zTree生成的id的规则
    例如 : treeDemo_7_ico  --> ul的id_当前节点的序号_功能
    当前节点的序号可以通过treeNode的tId属性获取
    */
    var spanId = treeNode.tId + "_ico";

    // 找到上面原本的span标签,替换
    $('#' + spanId).removeClass().addClass(treeNode.icon);

}

// 鼠标移入节点范围添加按钮组
function myAddHoverDom(treeId, treeNode) {
    // 出现在treeDemo_n_a 超链接的后面

    // 为了移除按钮组的时候能够精准的定位按钮组所在的span,需要给span设置有规律的id
    var btnGroupId = treeNode.tId + "_btnGrp"


    // 判断是否以前添加了按钮组
    if ($("#" + btnGroupId).length > 0) {
        // 数量大于0不添加
        return;

    }

    // 准备各个标签的Html标签
    var addBtn = "<a id='" + treeNode.id + "' class='addBtn btn btn-info dropdown-toggle btn-xs' style='margin-left:10px;padding-top:0px;' href='#' title='添加子节点'>&nbsp;&nbsp;<i class='fa fa-fw fa-plus rbg '></i></a>";
    var removeBtn = "<a id='" + treeNode.id + "' class='removeBtn btn btn-info dropdown-toggle btn-xs' style='margin-left:10px;padding-top:0px;' href='#' title=' 删 除 节 点 '>&nbsp;&nbsp;<i class='fa fa-fw fa-times rbg '></i></a>";
    var editBtn = "<a id='" + treeNode.id + "' class='editBtn btn btn-info dropdown-toggle btn-xs' style='margin-left:10px;padding-top:0px;' href='#' title=' 修 改 节 点 '>&nbsp;&nbsp;<i class='fa fa-fw fa-edit rbg '></i></a>";

    // 获取当前节点的级别数据
    var level = treeNode.level;

    // 声明变量存储拼装好的按钮代码
    var btnHtml = "";

    // 判断当前节点的级别
    if (level == 0) {
        // 级别为0时是根节点，只能添加子节点
        btnHtml = addBtn;
    }

    // 判断级别添加按钮组
    if (level == 1) {
        // 级别为1是分支节点,可以添加子节点和修改
        btnHtml = addBtn + ' ' + editBtn;
        // 获取当前节点的子节点数量
        var length = treeNode.children.length;

        // 没有子节点,可以删除
        if (length == 0) {
            btnHtml = btnHtml + "" + removeBtn;
        }
    }
    if (level == 2) {
        // 级别为2是叶子节点,可以删除,修改
        btnHtml = editBtn + "" + removeBtn;
    }
    // 找到附着的按钮组的超链接
    var anchorId = treeNode.tId + "_a";

    // 执行在超链接后面添加span元素的操作
    $("#" + anchorId).after("<span id='" + btnGroupId + "'>" + btnHtml + "</span>");


}

// 设置鼠标离开节点范围时删除按钮组
function myRemoveHoverDom(treeId, treeNode) {
    // 拼接按钮组的id
    var btnGroupId = treeNode.tId + "_btnGrp";

    // 移除对应的元素
    $("#" + btnGroupId).remove();

}

